package com.example.demo6copy;

import java.io.*;

/**
 * 目标：使用字节流完成文件的复制操作
 */
public class CopyDemo1 {
    public static void main(String[] args) {
        // 源文件：D:\File\Test\123.jpg
        // 目标文件：D:\File 注意：(复制过去的时候必须带文件名的，无法自动生成文件名)
        copyFile("D:\\File\\Test\\123.jpg", "D:\\File\\123.jpg");
    }

    /**
     * 复制文件
     * @param srcPath 源文件路径
     * @param destPath 目标文件路径
     */
    public static void copyFile(String srcPath, String destPath) {
        // 1.创建一个文件字节输入流管道与源文件接通
        InputStream fis = null;
        OutputStream fos = null;

        try {
            fis = new FileInputStream(srcPath);
            fos = new FileOutputStream(destPath);
            // 2.读取一个字节数组，写入一个字节数组  1024 + 1024 + 3
            byte[] buffer = new byte[1024];
            int len;
            while ((len = fis.read(buffer)) != -1) {
                fos.write(buffer, 0, len); // 读取多少个字节，就写入多少个字节
            }
            System.out.println("复制成功！");
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            // 最后一定会执行一次：即便程序出现异常！
            // 3.释放资源
            try {
                // 如果if语句只有一行代码，可以省略{}
                if (fos != null) fos.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            try {
                // 不省略{}的写法
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
